using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.MakeIT.Laundy.Agromotor.Site.Entidades;

namespace MakeIT.MakeIT.Laundy.Agromotor.Site.Negocios
{
	public partial class AgromotorsiteDAO : DAO
	{

		public static ConteudoimagemVO getConteudoimagem(int? idConteudoImagem)
		{
			ConteudoimagemVO conteudoimagemVO = null;
			List<ConteudoimagemVO> listConteudoimagemVOs = getConteudoimagems(idConteudoImagem, null);
			if (listConteudoimagemVOs != null && listConteudoimagemVOs.Count > 0)
			{
				conteudoimagemVO = listConteudoimagemVOs[0];
			}
			return conteudoimagemVO;
		}

		public static List<ConteudoimagemVO> getConteudoimagems()
		{
			return getConteudoimagems(null, null);
		}

        public static List<ConteudoimagemVO> getConteudoimagems(int? idConteudoImagem, int? idConteudoEstatico)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT cof.idConteudoImagem as cof_idConteudoImagem, cof.idConteudoEstatico as cof_idConteudoEstatico, cof.imagemMime as cof_imagemMime, cof.imagemNome as cof_imagemNome , cof.Cadastro as cof_Cadastro, cof.CadastradoPor as cof_CadastradoPor, cof.Edicao as cof_Edicao, cof.EditadoPor as cof_EditadoPor  ");
			query.AppendLine("FROM conteudoimagem as cof ");
            if (idConteudoImagem != null)
            {
                query.AppendLine(where + "cof.idConteudoImagem=@idConteudoImagem ");
                where = "AND ";
            }
            if (idConteudoEstatico != null)
            {
                query.AppendLine(where + "cof.idConteudoEstatico=@idConteudoEstatico ");
                where = "AND ";
            }


			query.AppendLine("ORDER BY cof.idConteudoImagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

            if (idConteudoImagem != null) cmd.Parameters.Add(getParameter(cmd, "@idConteudoImagem", idConteudoImagem));
            if (idConteudoEstatico != null) cmd.Parameters.Add(getParameter(cmd, "@idConteudoEstatico", idConteudoEstatico));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<ConteudoimagemVO> listConteudoimagem = new List<ConteudoimagemVO>();

				while (reader.Read())
				{
					ConteudoimagemVO conteudoimagemVO = ConteudoimagemVO.CreateVO();
                    conteudoimagemVO.idConteudoImagem = reader.GetInt32(reader.GetOrdinal("cof_idConteudoImagem"));
                    conteudoimagemVO.idConteudoEstatico = reader.GetInt32(reader.GetOrdinal("cof_idConteudoEstatico"));
                    if (!reader.IsDBNull(reader.GetOrdinal("cof_imagemMime")))
						conteudoimagemVO.imagemMime = reader.GetString(reader.GetOrdinal("cof_imagemMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("cof_imagemNome")))
						conteudoimagemVO.imagemNome = reader.GetString(reader.GetOrdinal("cof_imagemNome"));
					conteudoimagemVO.cadastro = reader.GetDateTime(reader.GetOrdinal("cof_Cadastro"));
					conteudoimagemVO.cadastradoPor = reader.GetString(reader.GetOrdinal("cof_CadastradoPor"));
					conteudoimagemVO.edicao = reader.GetDateTime(reader.GetOrdinal("cof_Edicao"));
					conteudoimagemVO.editadoPor = reader.GetString(reader.GetOrdinal("cof_EditadoPor"));


					listConteudoimagem.Add(conteudoimagemVO);
				}
				reader.Close();
				return listConteudoimagem;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
        }

		public static void setConteudoimagem(ConteudoimagemVO conteudoimagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE conteudoimagem ");
            query.AppendLine("SET idConteudoEstatico=@idConteudoEstatico, imagemMime=@imagemMime, imagemNome=@imagemNome,  Cadastro=@Cadastro, CadastradoPor=@CadastradoPor, Edicao=@Edicao, EditadoPor=@EditadoPor ");
			query.AppendLine("WHERE idConteudoImagem=@idConteudoImagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

            cmd.Parameters.Add(getParameter(cmd, "@idConteudoImagem", conteudoimagemVO.idConteudoImagem));
            cmd.Parameters.Add(getParameter(cmd, "@idConteudoEstatico", conteudoimagemVO.idConteudoEstatico));
            cmd.Parameters.Add(getParameter(cmd, "@imagemMime", conteudoimagemVO.imagemMime));
			cmd.Parameters.Add(getParameter(cmd, "@imagemNome", conteudoimagemVO.imagemNome));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", conteudoimagemVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", conteudoimagemVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", conteudoimagemVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", conteudoimagemVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static long newConteudoimagem(ConteudoimagemVO conteudoimagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO conteudoimagem ");
            query.AppendLine("  ( idConteudoEstatico, imagemMime, imagemNome, Cadastro, CadastradoPor, Edicao, EditadoPor ) ");
            query.AppendLine("VALUES ( @idConteudoEstatico, @imagemMime, @imagemNome, @Cadastro, @CadastradoPor, @Edicao, @EditadoPor ) ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

            cmd.Parameters.Add(getParameter(cmd, "@idConteudoEstatico", conteudoimagemVO.idConteudoEstatico));
            cmd.Parameters.Add(getParameter(cmd, "@imagemMime", conteudoimagemVO.imagemMime));
			cmd.Parameters.Add(getParameter(cmd, "@imagemNome", conteudoimagemVO.imagemNome));
			cmd.Parameters.Add(getParameter(cmd, "@Cadastro", conteudoimagemVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@CadastradoPor", conteudoimagemVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@Edicao", conteudoimagemVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@EditadoPor", conteudoimagemVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('conteudoimagem') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void delConteudoimagem(ConteudoimagemVO conteudoimagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM conteudoimagem ");
			query.AppendLine("WHERE idConteudoImagem=@idConteudoImagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idConteudoImagem", conteudoimagemVO.idConteudoImagem));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}
		public static void setConteudoimagemImagem(ConteudoimagemVO conteudoimagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE conteudoimagem ");
			query.AppendLine("SET imagem=@imagem, imagemMime=@imagemMime, imagemNome=@imagemNome ");
			query.AppendLine("WHERE idConteudoImagem=@idConteudoImagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idConteudoImagem", conteudoimagemVO.idConteudoImagem));

			cmd.Parameters.Add(getParameter(cmd, "@imagem", conteudoimagemVO.imagem));
			cmd.Parameters.Add(getParameter(cmd, "@imagemMime", conteudoimagemVO.imagemMime));
			cmd.Parameters.Add(getParameter(cmd, "@imagemNome", conteudoimagemVO.imagemNome));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }

		}

		public static void getConteudoimagemImagem(ConteudoimagemVO conteudoimagemVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT imagem as cof_imagem, imagemMime as cof_imagemMime, imagemNome as cof_imagemNome ");
			query.AppendLine("FROM conteudoimagem ");
			query.AppendLine("WHERE idConteudoImagem=@idConteudoImagem ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idConteudoImagem", conteudoimagemVO.idConteudoImagem));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				if (reader.Read())
				{
					conteudoimagemVO.imagem = getBytesFromBlob(reader, "cof_imagem");

					if (!reader.IsDBNull(reader.GetOrdinal("cof_imagemMime")))
						conteudoimagemVO.imagemMime = reader.GetString(reader.GetOrdinal("cof_imagemMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("cof_imagemNome")))
						conteudoimagemVO.imagemNome = reader.GetString(reader.GetOrdinal("cof_imagemNome"));

				}
				reader.Close();
				return;
			}
			catch (Exception ex) { throw ex; }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
                if (cmd != null && cmd.Connection != null)
                    cmd.Connection.Close();
            }
        }

	}
}
